suppressWarnings(library(tidyverse))

if (!require("pacman")) 
  install.packages("pacman")

pacman::p_load(knitr,
               tidyverse,
               lubridate,
               here,
               dplyr,
               here,
               ggplot2,
               ggmap,
               maps,
               rnaturalearth,
               rnaturalearthdata,
               sf,
               plotly,
               magick,
               listviewer,
               shiny,
               gganimate,
               gifski,
               shiny,
               shinydashboard,
               imager)
## Dataset Setup

elephant <- readxl::read_xlsx(here("data","elephant_data.xlsx"))
## Plots

# Load the Africa countries dataset
africa <- ne_countries(scale = "medium", continent = "Africa", returnclass = "sf")
## Data Warangling

library(dplyr)
# Select the columns of interest (e.g., country and estimate)

elephant_data <- elephant |>
  select(Country,Ecosystem,Estimate,Year)

elephant_data_1995 <- elephant %>%
  filter(Year == 1995) %>%
  select(Country,Ecosystem, Estimate,Year)

elephant_data_1996 <- elephant %>%
  filter(Year == 1996) %>%
  select(Country,Ecosystem, Estimate,Year)

elephant_data_1998 <- elephant %>%
  filter(Year == 1998) %>%
  select(Country,Ecosystem, Estimate,Year)

elephant_data_1999 <- elephant %>%
  filter(Year == 1999) %>%
  select(Country,Ecosystem, Estimate,Year)

elephant_data_2000 <- elephant %>%
  filter(Year == 2000) %>%
  select(Country,Ecosystem, Estimate,Year)

elephant_data_2001 <- elephant %>%
  filter(Year == 2001) %>%
  select(Country,Ecosystem, Estimate,Year)

elephant_data_2002 <- elephant %>%
  filter(Year == 2002) %>%
  select(Country,Ecosystem, Estimate,Year)

elephant_data_2004 <- elephant %>%
  filter(Year == 2004) %>%
  select(Country,Ecosystem, Estimate,Year)

elephant_data_2005 <- elephant %>%
  filter(Year == 2005) %>%
  select(Country,Ecosystem, Estimate, Year)

elephant_data_2006 <- elephant %>%
  filter(Year == 2006) %>%
  select(Country,Ecosystem, Estimate, Year)

elephant_data_2007 <- elephant %>%
  filter(Year == 2007) %>%
  select(Country,Ecosystem, Estimate, Year)

elephant_data_2008 <- elephant %>%
  filter(Year == 2008) %>%
  select(Country,Ecosystem, Estimate, Year)

elephant_data_2009 <- elephant %>%
  filter(Year == 2009) %>%
  select(Country,Ecosystem, Estimate, Year)

elephant_data_2010 <- elephant %>%
  filter(Year == 2010) %>%
  select(Country,Ecosystem, Estimate, Year)

elephant_data_2014 <- elephant %>%
  filter(Year == 2014) %>%
  select(Country,Ecosystem, Estimate, Year)
# To install the latest version from Github:
#install.packages("devtools")
#devtools::install_github("tylermorganwall/rayshader")

#options(repos = c(CRAN = "http://cran.rstudio.com"))

install.packages('C:/Users/Jithin/Downloads/rayshader_0.35.7.zip', repos=NULL, type='source')

#remotes::install_github("tylermorganwall/rayshader")
### Africa plots

# Load the necessary libraries
library(rnaturalearth)
library(ggplot2)
library(raster)
library(rayshader)
library(rgl)



# Load the elephant population data (replace this with your own data)
# Assuming you have a data frame named 'elephant_data' with 'Country', 'Estimate' columns

# Merge the elephant data with natural earth data to get the country shapes
#world <- ne_countries(scale = "medium", returnclass = "sf")

# Create a ggplot map
#elephant_map_1995 <- merge(world, elephant_data_1995, by.x = "name", by.y = "Country")

# Create a ggplot map
#map1 <- ggplot() +
#  geom_sf(data = africa, fill = "white") +
 # geom_sf(data = elephant_map_1995, aes(fill = Estimate), color = "brown", size = 0.2) +
#  scale_fill_viridis_c(option = "plasma", name = "Estimate") +
#  scale_fill_gradient(low = "skyblue", high = "darkgreen") +
#  theme_minimal() +
#  labs(title = "Elephant Population Estimates in Africa in 1995")+
#  theme_void()+
#  theme(
#    legend.position = "none"
#  )



generate_elephant_map <- function(elephant_data, year) {
  # Load the natural earth data for Africa
  africa <- ne_countries(scale = "medium", returnclass = "sf", continent = "Africa")
  
  # Merge the elephant data with natural earth data to get the country shapes
  elephant_map <- merge(africa, elephant_data, by.x = "name", by.y = "Country")
  
  # Create a ggplot map
  gg <- ggplot() +
    geom_sf(data = africa, fill = "white") +
    geom_sf(data = elephant_map, aes(fill = Estimate), color = "brown", size = 0.2) +
    scale_fill_viridis_c(option = "plasma", name = "Estimate") +
    scale_fill_gradient(low = "skyblue", high = "darkgreen") +
    theme_void() +
    labs(title = paste("Elephant Population Estimates in Africa in", year))
  
  # Convert ggplot to plotly
  gg_plotly <- ggplotly(gg)
  
  return(gg_plotly)
}


# Call the function with the data for 1996
#elephant_1995_plot <- generate_elephant_map(elephant_data_1995, 1995)
#elephant_1996_plot <- generate_elephant_map(elephant_data_1996, 1996)
#elephant_2005_plot <- generate_elephant_map(elephant_data_2005, 2005)
#elephant_2006_plot <- generate_elephant_map(elephant_data_2006, 2006)
#elephant_2010_plot <- generate_elephant_map(elephant_data_2010, 2010)
elephant_2014_plot <- generate_elephant_map(elephant_data_2014, 2014)

#elephant_data_2010

elephant_2014_plot


# Save the plot
#image <- ggsave(plot=map1, "map1.tiff", device = "tiff")

# Create a StackedRaster object from the saved plot
#map1raster <- raster("map1.tiff") # OR stack("my_ggplot.tiff") for colored images

#And convert it to a matrix:
#elmat = raster_to_matrix(map1raster)

#We use another one of rayshader's built-in textures:
#elmat %>%
 # sphere_shade(texture = "desert") %>%
#  plot_map()
#plot_gg(ggobj = elephant_2014_plot)
#save_png("map1.png")
#rgl::rglwidget()
library(rnaturalearth)
library(ggplot2)
library(plotly)
library(ggiraph)

library(raster)
library(rayshader)
library(rgl)
# Assuming elephant_data_1996 and world are already defined

# Merge data
world <- ne_countries(scale = "medium", returnclass = "sf")
elephant_map_1996 <- merge(world, elephant_data_1996, by.x = "name", by.y = "Country")

# Create a ggplot map
gg_map <- ggplot() +
  geom_sf(data = africa, fill = "white") +
  geom_sf(data = elephant_map_1996, aes(fill = Estimate), color = "brown", size = 0.2) +
  scale_fill_viridis_c(option = "plasma", name = "Estimate") +
  scale_fill_gradient(low = "skyblue", high = "darkgreen") +
  theme_bw() +
  labs(title = "Elephant Population Estimates in Africa in 1996")

# Convert ggplot to plotly
#elephant_map_1996_plotly <- ggplotly(gg_map)

# Add theme to the hover
#elephant_map_1996_plotly <- elephant_map_1996_plotly %>% 
  #layout(hoverlabel = list(bgcolor = "white", font = list(family = "Arial", color = "black")))

# Show the plotly map
#elephant_map_1996_plotly

#gg_map2 <- ggiraph::girafe(ggobj = gg_map)
#gg_map2

#plot_gg(gg_map, multicore = TRUE, width = 6 ,height=2.7, fov = 70)
#render_movie(filename = "demo.mp4", type = "orbit")
#rgl::rglwidget()
library(circularEV)
library(rnaturalearth)
The legacy packages maptools, rgdal, and rgeos, underpinning the sp package,
which was just loaded, were retired in October 2023.
Please refer to R-spatial evolution reports for details, especially
https://r-spatial.org/r/2023/05/15/evolution4.html.
It may be desirable to make the sf package available;
package maintainers should consider adding sf to Suggests:.
Support for Spatial objects (`sp`) will be deprecated in {rnaturalearth} and will be removed in a future release of the package. Please use `sf` objects with {rnaturalearth}. For example: `ne_download(returnclass = 'sf')`
library(ggplot2)
library(plotly)

Attaching package: 'plotly'
The following object is masked from 'package:ggplot2':

    last_plot
The following object is masked from 'package:stats':

    filter
The following object is masked from 'package:graphics':

    layout
library(ggiraph)
library(ggshadow)

library(raster)
Loading required package: sp

Attaching package: 'raster'
The following object is masked from 'package:plotly':

    select
library(rayshader)
library(rgl)

africa <- ne_countries(scale = "medium", returnclass = "sf", continent = "Africa")
cnt <- ne_countries(scale = "medium", returnclass = "sf", country = "sudan")
cnt2 <- ne_countries(scale = "medium", returnclass = "sf", country = "senegal")
col1 <- c("Angola", "Botswana", "Cameroon", "Chad", "Congo", "Kenya","Malawi",
          "Mali", "Mozambique", "South Africa", "Tanzania","Uganda", "Zambia", "Zimbabwe")
col2 <- c(20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20)

eco <- data.frame(col1,col2)

eco2 <- merge(africa, eco, by.x = "name", by.y = "col1")


#africa
gg_map <- ggplot() +
  geom_sf(data = africa, fill = "gray85", color = "gray", linewidth = 0.9 ) +
  geom_sf(data= eco2, aes(fill = col2), color = "white", linewidth = 0.5)+
  theme_void()+
  theme(
    plot.background = element_rect(
      fill = "white",
      colour = "white"
    ),
    legend.position = "none")

gg_map

map3d <- plot_gg(gg_map, 
                 multicore=TRUE,
                 width=5,
                 height=5,
                 scale = 350,
                 windowsize = c(1000, 1000),
                 phi = 30,
                 save_height_matrix = TRUE,
                 theta = 0,
                 flat_transparent_bg = TRUE,
                 invert = FALSE
)
render_label(map3d, text = "Origin", x = 0, y = 0, z = 400)
render_label(map3d, text = "Angola", x = 800, y = 900, z = 400)
render_label(map3d, text = "Botswana", x = 920, y = 1050, z = 400)
render_label(map3d, text = "Cameroon", x = 750, y = 600, z = 400)
render_label(map3d, text = "Congo", x = 800, y = 680, z = 400)
render_label(map3d, text = "Mali", x = 520, y = 420, z = 400)
render_label(map3d, text = "Chad", x = 820, y = 430, z = 400)
render_label(map3d, text = "South Africa", x = 920, y = 1150, z = 400)
render_label(map3d, text = "Zambia", x = 950, y = 900, z = 400)
render_label(map3d, text = "Zimbabwe", x = 1030, y = 980, z = 400)
render_label(map3d, text = "Malawi", x = 1090, y = 900, z = 400)
render_label(map3d, text = "Mozambique", x = 1150, y = 920, z = 400)
render_label(map3d, text = "Tanzania", x = 1090, y = 750, z = 400)
render_label(map3d, text = "Kenya", x = 1150, y = 680, z = 400)
render_label(map3d, text = "Uganda", x = 1060, y = 650, z = 400)
#render_camera(theta = -90, phi = 30,zoom = 0.5,fov = 130)

for(i in 1:360) {
 render_camera(theta = -90,phi = i,zoom = 0.5)
 #uncomment the next line to save each frame to the working directory
 #render_snapshot(paste0("frame", i, ".png"))
}
Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90

Warning in rgl.clamp(phi, -90, 90): Value clamped to 90
rgl::rglwidget()